package co.edu.udea.iw.tusanimes.dao.impl;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.iw.tusanimes.dao.VideoDao;
import co.edu.udea.iw.tusanimes.dao.exception.DAOException;
import co.edu.udea.iw.tusanimes.dto.Video;


/**
 * 
 * Implementaci�n de la clase Video
 * 
 * @author Camila Naranjo
 * @versi�n 1.0
 * 
 */
public class VideoDaoImpl extends HibernateDaoSupport implements VideoDao {

	@Override
	public List<Video> obtenerVideoSerie(int Serie) throws DAOException {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * M�todo buscar un video en la tabla de Videos
	 * 
	 * @param idVideo
	 *            Identificador del video.
	 * @return Video Video encontrado.
	 * @throws DAOException
	 */

	@Override
	public Video buscarVideo(int idVideo) throws DAOException {
		Video video = null;
		try {
			Session sesion = getSession();
			video = (Video) sesion.createCriteria(Video.class)
					.add(Restrictions.eq("id", idVideo)).uniqueResult();
		} catch (HibernateException e) {
			throw new DAOException();
		}
		return video;
	}

	/**
	 * M�todo eliminar un video en la tabla de Videos
	 * 
	 * @param idVideo
	 *            Identificador del video.
	 * @throws DAOException
	 */
	@Override
	public void eliminarVideo(int idVideo) throws DAOException {
		Session session = null;
		Transaction tx = null;
		Query query = null;
		String sql;

		try {
			session = getSession();
			tx = session.beginTransaction();
			sql = "delete from Video where idVideo= :id";
			query = session.createQuery(sql);

			query.setInteger("id", idVideo);
			query.executeUpdate();
			tx.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			throw new DAOException();
		}
	}

	/**
	 * M�todo actualizar una noticia en la tabla de Noticias
	 * 
	 * @param video
	 *            Video a actualizar.
	 * @return Video Video actualizado.
	 * @throws DAOException
	 */
	@Override
	public Video actualizarInfoVideo(Video video) throws DAOException {
		Transaction tx = null;
		try {
			Session session = getSession();
			tx = session.beginTransaction();
			session.update(video);
			tx.commit();
		} catch (HibernateException e) {
			throw new DAOException();
		}
		return video;
	}

	/**
	 * M�todo para crear una nueva noticia a la tabla de Noticias
	 * 
	 * @param videoNuevo
	 *            Video a guardar.
	 * @return Video Video guardado.
	 * @throws DAOException
	 * 
	 */
	@Override
	public Video crearVideo(Video videoNuevo) throws DAOException {
		Session session = null;
		Transaction tx = null;
		try {
			session =getSession();
			tx = session.beginTransaction();

			session.save(videoNuevo);
			tx.commit();
		} catch (HibernateException e) {
			throw new DAOException();
		}
		return videoNuevo;
	}

}
